window.onload = myfun;
var obj = []
function myfun() {
    console.log('开始记录');
    isDocument()
    // 监听用户点击事件
    watchClick(window, null)
    // 监听键盘事件
    watcBlur(window, null)
}

// 判断当前系统对象
function isDocument() {
    let iframes = document.getElementsByTagName("iframe");
    if (iframes.length != 0) {
        for (let i = 0; i < iframes.length; i++) {
            let iframeId = iframes[i].id;
            let currentIframe = document.getElementById(iframeId);
            let currentDoc = currentIframe.contentDocument || currentIframe.contentWindow.document;
            // 监听用户点击事件
            watchClick(currentDoc, iframeId)
            // 监听键盘事件
            watcBlur(currentIframe, iframeId)
        }
    }
}
function watchClick(win, iframeId) {
    win.addEventListener("click", (e) => {
        // 判断是否是svg
        let data = setSvg(e)
        // 判断操作属性
        // let type = setType(e)
        obj.push({
            iframeId: iframeId,
            type: e.type,
            href: win.location.href,
            xpath: data.xpath,
            text: e.target.innerText,
            id: data.id,
            className: e.target.className,
            time: getDate(),
            vendor: e.view.navigator.vendor,
            appVersion: e.view.navigator.appVersion
        })
        localStorage.setItem('SystemRecord', JSON.stringify(obj))
        console.log(obj, '记录了点击事件');
    })
}

function watcBlur(win, iframeId) {
    let timer = null;
    win.onkeydown = function (ev) {
        var event = ev || event
        event.target.addEventListener("blur", (e) => {
            clearTimeout(timer); //如果存在事件就清除定时器
            timer = setTimeout(function () {
                if (e.target.nodeName == 'INPUT' && e.target.value) {
                    obj.push({
                        iframeId: iframeId,
                        type: 'blur',
                        href: win.location.href,
                        xpath: getPathTo(e.target),
                        value: e.target.value,
                        time: getDate(),
                    })
                    console.log(obj, '记录失去焦点事件');
                }
            }, 50)
        })
    };

}
// 判断type事件
// function JudgePath(e) {
//     var dom = document.activeElement
//     if (obj.length >= 0 && getPathTo(dom) == obj[obj.length - 1].xpath && obj[obj.length - 1].type == 'type') {
//         obj[obj.length - 1].value += e.key
//     } else {
//         obj.push({
//             type: 'type',
//             href: window.location.href,
//             xpath: getPathTo(dom),
//             value: e.key,
//             time: getDate(),
//         })
//     }
//     localStorage.setItem('SystemRecord', JSON.stringify(obj))
//     console.log(obj, '触发了键盘');
// }


// 处理svg
function setSvg(e) {
    let xpath, id;
    if (e.target.tagName == 'path') {
        xpath = getPathTo(e.target.parentElement.parentElement)
        id = getChildren(e.target.parentElement.parentElement)
    } else if (e.target.tagName == 'svg') {
        xpath = getPathTo(e.target.parentElement)
        id = getChildren(e.target.parentElement)
    } else {
        xpath = getPathTo(e.target)
        id = getChildren(e.target)
    }
    return { xpath: xpath, id: id }
}
// 获取时间
function getDate() {
    var date = new Date();
    var time = date.toLocaleDateString();
    var t = time.split('/')
    return t[0] + '-' + t[1] + '-' + t[0] + ' ' + date.toLocaleTimeString()
}
// 获取xpath
function getPathTo(element) {
    if (element.id !== "") {//判断id属性，如果这个元素有id，则显 示//*[@id="xPath"]  形式内容
        // eslint-disable-next-line no-useless-escape
        return '//*[@id=\"' + element.id + '\"]';
    }
    //这里需要需要主要字符串转译问题，可参考js 动态生成html时字符串和变量转译（注意引号的作用）
    if (element == document.body) {//递归到body处，结束递归
        return '/html/' + element.tagName.toLowerCase();
    }
    var ix = 1,//在nodelist中的位置，且每次点击初始化
        siblings = element.parentNode.childNodes;//同级的子元素

    for (var i = 0, l = siblings.length; i < l; i++) {
        var sibling = siblings[i];
        //如果这个元素是siblings数组中的元素，则执行递归操作
        if (sibling == element) {
            return arguments.callee(element.parentNode) + '/' + element.tagName.toLowerCase() + '[' + (ix) + ']';
            //如果不符合，判断是否是element元素，并且是否是相同元素，如果是相同的就开始累加
        } else if (sibling.nodeType == 1 && sibling.tagName == element.tagName) {
            ix++;
        }
    }
}

// 找出所有子元素判断是否有id
function getChildren(parent) {
    // 先判断本身是否有id
    if (parent.id) return parent.id
    // 创建迭代器
    let ids = []
    var iterator = document.createNodeIterator(parent, NodeFilter.SHOW_ELEMENT, null, false);
    // 用循环反复调用节点迭代器对象的nextNode().跳向下一个节点
    var node;
    while ((node = iterator.nextNode()) != null) {
        if (node.id) {
            ids.push(node.id)
        }
    }
    return ids[0]
}





// 解析用户点击事件
// document.evaluate('id("sub_menu_1_$$_1-popup")/LI[3]/SPAN[2]/A[1]',document).iterateNext().click()
// dispatchEvent(new Event('input'))

// 模拟用户点击键盘
// var e = new KeyboardEvent('keydown',{'keyCode':13,'which':13});
// document.body.dispatchEvent(e);
// document.dispatchEvent(new Event('click'))

// function getApi() {
//     if (typeof performance == "undefined") {
//         console.log('performance获取失败');
//     } else {
//         console.log('performance获取成功');
//     }
// }


